云计算时代的大前端
1. 请简单介绍下自己
我叫张屾,2011年踏入互联网行业,整整10个年头了。我2018年加入快手,目前负责平台部web团队中的基础平台、前端监控、Node.js基建等几个方向的技术管理工作。在加入快手前曾在搜狗、百度等公司任职。曾经做过前端框架、工程化工具、性能优化等方面的研发工作。
我叫方超,网名 flashsoft ,现快手平台Web开发中心负责人,16年互联网从业经验,专注用技术提升用户体验,2020年加入快手负责平台Web开发中心,之前在新浪和微博服役了15年,算是个典型的互联网老兵
2. 聊聊最近一年做的项目,它的技术价值怎么样,在行业的发展状况怎么样,你负责项目的技术亮点和挑战能否展开讲讲?
最近一年已经从业务线转向一些基建类的项目。先后负责了快手Node.js基础监控排障方案的研发及推广工作,Node.js基础组件的研发及推广工作,前端性能及稳定性度量系统 - 雷达的技术管理工作。
以Node.js相关的基建工作为例。Node.js是近十年来最成功的开源项目之一。从受众上可以覆盖所有的前端和一部分后端,从场景上可以覆盖前台业务、后台业务、工具等多个方面,应用场景广泛。但不得不说,Node.js从社区走来缺乏大厂的加持,在生产环境中的使用也没有足够强大的保障。在这样的背景下,我们该如何挖掘此类项目的潜质,使得它的基建能力匹配的上它的受众范围。在快手,大部分web团队都有在使用Node.js进行开发,这使得Node.js基建成为前端基础建设中重要的一环,也是我们的工作最大的技术价值所在。
Node.js生态的发展也并非一帆风顺。如早期的iojs风波和近期涌现的竞争对手Deno,其实也在一定程度刺激了Node.js生态的扩张。在我看来Node.js仍然大有可为且具备更高的上限。没有大厂的加持反而给了社区更多的机会。
这个方向的技术亮点和挑战我个人认为有两个。其一是方案的选择,我们场景是业务方众多且框架不统一而且框架运行在本地还不是云端,所以选择从哪个层面切入成了至关重要的一点,即如何降低业务接入成本,也为未来推广铺平道路。最终我们是在运行时层面做的功能植入,日志则采用旁路收集的方式保障服务进程的稳定性。在这一过程中要求我们的前端工程工程师有运行时底层的研发能力并且具备一定的系统编程能力,这是个非常大的挑战。而最终我们的产品在线上稳定运行一年没有发生任何故障。其二是利用司内已有的组件而不是重复开发。这一点会被一些人忽略,因为在推进的过程中,组件的研发团队最初的方案会有一定的升级和改造,如何跨团队设定统一的目标,让技术研发线认可我们做的事情并且讲清楚收益是至关重要的。
3. 在技术方案的落地过程中,你通常关注哪些问题?如何保障技术方案顺利实施
从业务视角出发,我们的技术方案是要解决实际业务中的问题和痛点,也是推广中重要的一环。所以是否能切近业务解决实际问题是我目前最关心的问题。同时基建团队也需要有意识的收集用户反馈,进行技术项目的迭代规划需要和用户的反馈结合。
在一个跨部门跨团队技术方案的实施过程中,一定会遇到一些卡点和问题。我们的实施由于方案的选择对业务方会相对容易接受,但是仍然需要从几个方面做考量。我这里简单说下技术侧的。其一是功能的迭代,研发节奏不能乱。每个版本的功能都需要四步走:研发/测试候选/灰度/上线。我们的每一个改动如果不能做到稳定性的保障那么会直接影响线上服务。其二是降级和兜底。在我看来是程序一定会出问题,虽然我们通过前置验证可以避免绝大多数情况但是仍然不能100%保障。当异常波动发生我们是否有能力进行快速的回滚和降级需要提前考虑,并且后续还需要有能力定位是哪个迭代引发的问题,是否自研代码还是社区代码引发。
4. 架构师在技术变化的浪潮中,需要面对的挑战有哪些,如何面对这些挑战?
前端方向更加凸显的问题是知识迭代更新的速度和雨后春笋般涌现的各种模块、库和方案。当我们的精力无法100%投入到研发中时,对技术方案的制定和选择在这样的背景下就会成为一个挑战。我个人的一些经验是抓重点,看领头羊。抓重点的意思是我们决策的是技术方案而不是细节的实现,技术方案的制定需要明确高优目标,能够满足高优目标的方案就是技术上更合适的。此外结合团队的研发能力和投入资源进行合理的决策甚至分阶段拆解也是架构是需要具备的关键能力。看领头羊的意思是多关注业界头部研发团队在相同的场景下给出的方案是什么样子的,汲取精华。这些方案的实现是实打实的工业界实践,具备很高的参考价值。
5. 在做技术选型的过程中,你经常考虑的问题有哪些?
业务视角:学习成本、是否解决实际问题、可能的推广风险和阻力;
技术视角:实现成本、研发团队的能力模型、行业价值;
6. 大前端领域你看好哪个项目或技术,为什么?
我个人最近接触的一些社区的原生跨端方案觉得比较有意思。很多文章和团队都在研发效率和性能之间画了一条水平线,左侧是H5,右侧是NA,大家会选择接近中点的实现方案。而我个人觉得除了这条水平线还有一条纵向的线,代表了数据采集/治理难度、性能和稳定性度量的复杂度。而围绕原生跨端建设的方案似乎也更能满足这个平衡点,具备不错的探索价值。
7. 介绍下本次快手前端在giac的演讲议题或专题内容
快手这次在咱们giac有两个前端的议题,分别是《快手前端实时性能监控和稳定性度量》和《KNode — 快手 Nodejs 监控排障的架构与实现》。
前端的性能监控和稳定性度量方面,毓谦会和大家分享快手前端团队的雷达系统。我们通过端内能力将用户点击开始直到关键内容展现完毕整个链路串联,并且提供了归因分析能力帮助业务方降低性能问题的根因定位成本。雷达系统还具备高稳定的特点,即便是春节活动这类的高峰流量场景。
Node.js方面,鸿轩会和大家分享KNode方案。在快手我们如何通过定制Node.js运行时的方式监控服务的线上运行状态,并且如何通过技术手段降低业务技术团队的排障成本的思考。
8. 对本次giac有什么寄语?
希望大家能够通过这个平台的交流与分享,碰撞出更多技术的火花,发现更多有趣有意思项目,认识更多的朋友。也希望giac越办越好,聚合更多对技术有热情的人。
参考阅读
原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。